package org.lql.algo.codecrush.week004;

import java.util.Stack;

/**
 * @author: liangqinglong
 * @date: 2025-08-01 17:44
 * @description: 155. 最小栈 <a href="https://leetcode.cn/problems/min-stack/description/">...</a>
 **/
public class MinStack {

	/**
	 * 设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
	 * <p>
	 * 实现 MinStack 类:
	 * <p>
	 * MinStack() 初始化堆栈对象。
	 * void push(int val) 将元素val推入堆栈。
	 * void pop() 删除堆栈顶部的元素。
	 * int top() 获取堆栈顶部的元素。
	 * int getMin() 获取堆栈中的最小元素。
	 */

	// 正常存数据的栈
	private Stack<Integer> stack = new Stack<>();
	// 存当前最小值的栈
	private Stack<Integer> minStack = new Stack<>();

	public MinStack() {

	}

	public void push(int val) {
		stack.push(val);
		if (minStack.isEmpty()) {
			minStack.push(val);
		} else {
			minStack.push(Math.min(minStack.peek(), val));
		}
	}

	public void pop() {
		stack.pop();
		minStack.pop();
	}

	public int top() {
		return stack.peek();
	}

	public int getMin() {
		return minStack.peek();
	}
}
